package com.xgs.util;

import net.coobird.thumbnailator.Thumbnails;

import java.io.File;
import java.io.IOException;

/**
 * Created by Massive on 2016/12/30.
 * https://blog.csdn.net/MassiveStars/article/details/53946639
 */

public class ThumbUtils {
	public static int count = 0;
    enum ImageType {

        JPG,JPEG,PNG,GIF;

        public static boolean isImage(String imageType) {
            if (imageType == null) {
                return false;
            }
            for (ImageType type : ImageType.values()) {
                if (type.toString().equals(imageType.toUpperCase())) {
                    return true;
                }
            }
            return false;
        }
    }

      /**
     * 批量把sourceDir目录及子目录里的图片压缩
     * 输出目录为destDir,原子目录也随之创建
     * @param sourceDir
     * @param destDir
     */
    public static void batchConvert(String sourceDir,String destDir) throws IOException {
        batchConvert(sourceDir,destDir,sourceDir);
    }

    private static void batchConvert(String sourceDir,String destDir,String filePathString) throws IOException {
        File filePath = new File(filePathString);
        if (filePath.isDirectory()) {
            for (File it : filePath.listFiles()) {
                batchConvert(sourceDir,destDir,it.getAbsolutePath());
            }
        } else {
            String absolutePath = filePath.getAbsolutePath();
            String relativePath = absolutePath.substring(sourceDir.length(),absolutePath.length());
            convert(filePath.getAbsolutePath(),destDir +File.separator+ relativePath);
        }
    }


    /**
     * 把source路径的图片压缩，输出到dest路径
     * @param source 原图片路径
     * @param dest   压缩后保存的图片路径
     * @throws IOException
     */
    public static void convert(String source,String dest) throws IOException {
    	
        File outPathDir = new File(getDirectoryPath(dest));
        if (!outPathDir.exists()) {
            outPathDir.mkdirs();
        }

        //-----------------------------------------------
        // 只对符合自定义图片扩展名的文件进行处理
        //-----------------------------------------------
        
        /**
         * of：要压缩的图片路径
			scale：压缩后相对原尺寸的等比例大小
			size: size(int width, int height)长和宽，size和scale只能二选一
			outputQuality：压缩质量
			toFile：输出路径
         */
        if (ImageType.isImage(getFileExt(source))) {
            Thumbnails.of(source).scale(1f).toFile(dest);
            count++;
        }
//        System.out.println("---------------------------");
//        System.out.println("source: " + source);
//        System.out.println("dest: " + dest);
//        System.out.println("---------------------------");
    }

    /**
     * 返回文件的扩展名
     * @param filePath
     * @return
     */
    public static String getFileExt(String filePath) {
        if (filePath != null && !"".equals(filePath)) {
            return filePath.substring(filePath.lastIndexOf(".") + 1, filePath.length());
        }
        return null;
    }

    /**
     * 返回文件(非文件夹)filePath的绝对目录路径
     * @param filePath 输入的文件夹
     * @return
     */
    public static String getDirectoryPath(String filePath) {
        return filePath.substring(0,filePath.lastIndexOf(File.separator) );
    }


    public static void main(String[] args) throws IOException {

//        ThumbUtils.convert("D:\\TestImg\\1.jpg", "D:\\TestImg\\2.jpg");

    	//把/Coding/img目录及子目录所有的图片压缩至/Coding/img-thumb
//        ThumbUtils.batchConvert("/Coding/img", "/Coding/img-thumb");
        ThumbUtils.batchConvert(args[0], args[1]);
        System.out.println();
        XingXing.heart();
        System.out.println();
        System.out.println();
        System.out.println("操作完成，共计压缩完成："+count +"个文件,请到"+ args[1]+"提取文件");
    }
}